Projet réalisé dans le cadre de ma formation Openclassrooms
Vous venez d'intégrer une équipe de chercheurs de la Food and Agriculture Organization of the United Nations (FAO), en tant que data analyst. Votre équipe s'est vu confier la mission de réaliser une étude de grande ampleur sur le thème de la sous-nutrition dans le monde et elle compte sur vous pour lui donner un panorama de la situation. Vous travaillerez à partir de données fournies par la FAO.
La sous-nutrition est définie comme une insuffisance de l'alimentation nécessaire pour couvrir les besoins énergétiques quotidiens. Ce manque de nourriture peut provoquer des problèmes physiologiques et psychologiques importants, allant jusqu'à entraîner la mort.
À partir des données mises à notre disposition par la FAO (Food and Agriculture Organization of the United Nations) nous nous proposons d'étudier la sous-nutrition au niveau mondial, et en particulier pour l'année 2017.
# Manipulation des données
import pandas as pd
import numpy as np
# Visualisation des données
import plotly.express as px
import matplotlib.pyplot as plt
%matplotlib inline
population = pd.read_csv("C:/Users/jorda/Data_P4/population.csv")
sous_nutrition = pd.read_csv("C:/Users/jorda/Data_P4/sous_nutrition.csv")
dispo = pd.read_csv("C:/Users/jorda/Data_P4/Dispo_alimentaire.csv")
aide = pd.read_csv("C:/Users/jorda/Data_P4/aide_alimentaire.csv")
Avant de commencer notre étude il est nécessaire de nettoyer certaines des données à notre disposition.
population.head()
| Zone | Année | Valeur | |
|---|---|---|---|
| 0 | Afghanistan | 2013 | 32269.589 |
| 1 | Afghanistan | 2014 | 33370.794 |
| 2 | Afghanistan | 2015 | 34413.603 |
| 3 | Afghanistan | 2016 | 35383.032 |
| 4 | Afghanistan | 2017 | 36296.113 |
# On renomme les colonnes
population = population.rename(columns={"Zone": "Pays", "Valeur":"Population"})
# Conversion de la population
population['Population'] /= 1000
sous_nutrition.head()
| Zone | Année | Valeur | |
|---|---|---|---|
| 0 | Afghanistan | 2012-2014 | 8.6 |
| 1 | Afghanistan | 2013-2015 | 8.8 |
| 2 | Afghanistan | 2014-2016 | 8.9 |
| 3 | Afghanistan | 2015-2017 | 9.7 |
| 4 | Afghanistan | 2016-2018 | 10.5 |
# On renomme les colonnes
sous_nutrition = sous_nutrition.rename(columns={"Zone": "Pays", "Valeur":"Sous-nutrition"})
# Remplacement de valeurs
sous_nutrition = sous_nutrition.replace("<0.1", 0)
# Conversion de type
sous_nutrition['Sous-nutrition'] = pd.to_numeric(sous_nutrition['Sous-nutrition'], errors='coerce')
dispo.head()
| Zone | Produit | Origine | Aliments pour animaux | Autres Utilisations | Disponibilité alimentaire (Kcal/personne/jour) | Disponibilité alimentaire en quantité (kg/personne/an) | Disponibilité de matière grasse en quantité (g/personne/jour) | Disponibilité de protéines en quantité (g/personne/jour) | Disponibilité intérieure | Exportations - Quantité | Importations - Quantité | Nourriture | Pertes | Production | Semences | Traitement | Variation de stock | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Afghanistan | Abats Comestible | animale | NaN | NaN | 5.0 | 1.72 | 0.20 | 0.77 | 53.0 | NaN | NaN | 53.0 | NaN | 53.0 | NaN | NaN | NaN |
| 1 | Afghanistan | Agrumes, Autres | vegetale | NaN | NaN | 1.0 | 1.29 | 0.01 | 0.02 | 41.0 | 2.0 | 40.0 | 39.0 | 2.0 | 3.0 | NaN | NaN | NaN |
| 2 | Afghanistan | Aliments pour enfants | vegetale | NaN | NaN | 1.0 | 0.06 | 0.01 | 0.03 | 2.0 | NaN | 2.0 | 2.0 | NaN | NaN | NaN | NaN | NaN |
| 3 | Afghanistan | Ananas | vegetale | NaN | NaN | 0.0 | 0.00 | NaN | NaN | 0.0 | NaN | 0.0 | 0.0 | NaN | NaN | NaN | NaN | NaN |
| 4 | Afghanistan | Bananes | vegetale | NaN | NaN | 4.0 | 2.70 | 0.02 | 0.05 | 82.0 | NaN | 82.0 | 82.0 | NaN | NaN | NaN | NaN | NaN |
# On renomme la colonne
dispo = dispo.rename(columns={"Zone": "Pays"})
# Remplace des NaN par 0
dispo.fillna(0, inplace=True)
aide.head()
| Pays bénéficiaire | Année | Produit | Valeur | |
|---|---|---|---|---|
| 0 | Afghanistan | 2013 | Autres non-céréales | 682 |
| 1 | Afghanistan | 2014 | Autres non-céréales | 335 |
| 2 | Afghanistan | 2013 | Blé et Farin | 39224 |
| 3 | Afghanistan | 2014 | Blé et Farin | 15160 |
| 4 | Afghanistan | 2013 | Céréales | 40504 |
aide = aide.rename(columns={"Pays bénéficiaire": "Pays", "Valeur":"Aide"})
# On somme les populations sous-nutries dans chaque pays pour l'année 2017, on obtient ainsi la population sous-nutrie mondiale
mask = sous_nutrition['Année'] == "2016-2018"
pop_sousnutri_2017 = sous_nutrition.loc[mask, 'Sous-nutrition'].sum()
# On somme les populations de chaque pays pour l'année 2017, on obtient ainsi la population mondiale en 2017
mask = population['Année'] == 2017
pop_totale_2017 = population.loc[mask, 'Population'].sum()
# Calcul de la proportion de sous-nutrition en 2017
part_sous_nutrition = (pop_sousnutri_2017/pop_totale_2017)*100
print("Proportion de sous-nutrition:", round(part_sous_nutrition, 1), "%")
autre_population = pop_totale_2017-pop_sousnutri_2017
Proportion de sous-nutrition: 7.1 %
# Création du digramme circulaire
proportion = [autre_population, pop_sousnutri_2017]
labels = 'Autre population', 'Population sous-alimentée'
colors = 'skyblue', 'lightcoral'
plt.title("Proportion de personnes en état de sous-nutition en 2017", fontsize=18)
plt.pie(proportion, labels = labels, autopct = '%1.1f%%', colors = colors, startangle = 90)
plt.show()
En 2017, il y a environ 7.1 % de la population mondiale qui est en état de sous-nutrition. À noter que dans notre fichier, il manque des données pour des pays qui devraient être touchés par la sous-nutrition, tels que le Yémen. Il est donc possible que ce résultat de 7.1 % sous-estime la proportion réelle de personnes sous-alimentées dans le monde en 2017.
Pour connaître le nombre théorique de personnes qui pourraient être nourries, nous allons tout d'abord calculer la quantité de Kcal disponible par jour dans le monde.
Les femmes, les hommes et les enfants n'ont pas les mêmes besoins énergétiques. Néanmoins, pour simplifier les opérations nous avons choisi de considérer que le besoin moyen en Kcal pour une journée est celui d'un homme, soit 2500 kcal.
# Sélection des populations de chaque pays pour l'année 2017
mask = population['Année']==2017
population = population.loc[mask]
# On garde que les colonnes nécessaires concernant la disponibilité
dispo_pays = dispo[['Pays', 'Disponibilité alimentaire (Kcal/personne/jour)']]
# On groupe selon les pays et on calcul la somme de leurs disponibilités alimentaires
dispo_pays = dispo_pays.groupby(['Pays']).sum().reset_index()
# On joint les DataFrames dispo_pays et population
dispo_pop = pd.merge(dispo_pays, population)
# Ajout d'une colonne dispo_total qui donne les Kcal disponibles pour un pays et par jour
# On multiplie la colonne 'Population' par 1 million pour avoir la population en nombre d'habitant
dispo_pop['dispo_total'] = (dispo_pop['Disponibilité alimentaire (Kcal/personne/jour)'] * (dispo_pop['Population']*1000000))
dispo_pop.head()
| Pays | Disponibilité alimentaire (Kcal/personne/jour) | Année | Population | dispo_total | |
|---|---|---|---|---|---|
| 0 | Afghanistan | 2087.0 | 2017 | 36.296113 | 7.574999e+10 |
| 1 | Afrique du Sud | 3020.0 | 2017 | 57.009756 | 1.721695e+11 |
| 2 | Albanie | 3188.0 | 2017 | 2.884169 | 9.194731e+09 |
| 3 | Algérie | 3293.0 | 2017 | 41.389189 | 1.362946e+11 |
| 4 | Allemagne | 3503.0 | 2017 | 82.658409 | 2.895524e+11 |
# Somme des Kcal disponibles par jour dans chaque pays
dispo_monde_jour = dispo_pop['dispo_total'].sum()
print("Il y a", dispo_monde_jour, "Kcal disponibles par jour dans le monde.")
# Calcule du nombre de personnes pouvant être nourries avec le nombre de Kcal disponibles par jour au niveau mondial
personnes_nourries = dispo_monde_jour/2500 #2500 correspond au besoin énergétique moyen (en Kcal) pour un homme dans une journée
print("Nombre de personnes pouvant être nourries:", round(personnes_nourries, 0))
# Calcul de la proportion de personnes pouvant être nourries.
proportion_nourries = ((personnes_nourries/1000000)/pop_totale_2017)*100
print("Proportion:", round(proportion_nourries, 1), "%")
Il y a 20918984627331.0 Kcal disponibles par jour dans le monde. Nombre de personnes pouvant être nourries: 8367593851.0 Proportion: 110.9 %
En répartissant de manière équitable les denrées alimentaires disponibles au niveau mondial, il serait possible de nourrir environ 8,37 milliards de personnes soit 110,9% de la population mondiale.
# On selectionne seulement les lignes qui ont la valeur 'vegetale' dans la colonne 'Origine'
mask = dispo['Origine'].str.contains('vegetale')
dispo_vegetale = dispo.loc[mask]
# Puis on répète les mêmes opérations que précedement
dispo_vegetale = dispo_vegetale[['Pays', 'Disponibilité alimentaire (Kcal/personne/jour)']]
dispo_vegetale = dispo_vegetale.groupby(['Pays']).sum().reset_index()
dispo_pop2 = pd.merge(dispo_vegetale, population)
dispo_pop2['dispo_total'] = (dispo_pop2['Disponibilité alimentaire (Kcal/personne/jour)'] * (dispo_pop2['Population']*1000000))
dispo_monde_jour_vegetale = dispo_pop2['dispo_total'].sum()
print("Il y a", dispo_monde_jour_vegetale, "Kcal disponibles par jour dans le monde.")
personnes_nourries_vegetale = dispo_monde_jour_vegetale/2500
print("Nombre de personnes pouvant être nourries:", round(personnes_nourries_vegetale, 0))
proportion_vegetale = ((personnes_nourries_vegetale/1000000)/pop_totale_2017)*100
print("Proportion:", round(proportion_vegetale, 1), "%")
Il y a 17260764211501.0 Kcal disponibles par jour dans le monde. Nombre de personnes pouvant être nourries: 6904305685.0 Proportion: 91.5 %
Si on considérait seulement les denrées alimentaires d'origine végétale et qu'on les répartissait de manière équitable, il serait possible de nourrir environ 6,9 milliards de personnes soit 91,5% de la population mondiale.
La disponibilité intérieure peut s'exprimer de deux manières:
Nous utiliserons la deuxième expression.
dispo_inter = dispo
# On ajoute une colonne dans le DataFrame dispo_inter, qui calcule la disponibilité intérieure d'après la formule choisie
dispo_inter['disponibilité intérieure calculée'] = dispo_inter['Nourriture'] + dispo_inter['Aliments pour animaux'] + dispo_inter['Semences'] + dispo_inter['Traitement'] + dispo_inter['Autres Utilisations'] + dispo_inter['Pertes']
# On ajoute une ligne 'total' qui donne le total de chaque colonne contenant des nombres
dispo_inter.loc['total'] = dispo_inter.select_dtypes(np.number).sum()
dispo_inter
| Pays | Produit | Origine | Aliments pour animaux | Autres Utilisations | Disponibilité alimentaire (Kcal/personne/jour) | Disponibilité alimentaire en quantité (kg/personne/an) | Disponibilité de matière grasse en quantité (g/personne/jour) | Disponibilité de protéines en quantité (g/personne/jour) | Disponibilité intérieure | Exportations - Quantité | Importations - Quantité | Nourriture | Pertes | Production | Semences | Traitement | Variation de stock | disponibilité intérieure calculée | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Afghanistan | Abats Comestible | animale | 0.0 | 0.0 | 5.0 | 1.72 | 0.20 | 0.77 | 53.0 | 0.0 | 0.0 | 53.0 | 0.0 | 53.0 | 0.0 | 0.0 | 0.0 | 53.0 |
| 1 | Afghanistan | Agrumes, Autres | vegetale | 0.0 | 0.0 | 1.0 | 1.29 | 0.01 | 0.02 | 41.0 | 2.0 | 40.0 | 39.0 | 2.0 | 3.0 | 0.0 | 0.0 | 0.0 | 41.0 |
| 2 | Afghanistan | Aliments pour enfants | vegetale | 0.0 | 0.0 | 1.0 | 0.06 | 0.01 | 0.03 | 2.0 | 0.0 | 2.0 | 2.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 2.0 |
| 3 | Afghanistan | Ananas | vegetale | 0.0 | 0.0 | 0.0 | 0.00 | 0.00 | 0.00 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
| 4 | Afghanistan | Bananes | vegetale | 0.0 | 0.0 | 4.0 | 2.70 | 0.02 | 0.05 | 82.0 | 0.0 | 82.0 | 82.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 82.0 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 15601 | Îles Salomon | Viande de Volailles | animale | 0.0 | 0.0 | 11.0 | 3.34 | 0.69 | 1.14 | 2.0 | 0.0 | 2.0 | 2.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 2.0 |
| 15602 | Îles Salomon | Viande, Autre | animale | 0.0 | 0.0 | 0.0 | 0.06 | 0.00 | 0.04 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
| 15603 | Îles Salomon | Vin | vegetale | 0.0 | 0.0 | 0.0 | 0.07 | 0.00 | 0.00 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
| 15604 | Îles Salomon | Épices, Autres | vegetale | 0.0 | 0.0 | 4.0 | 0.48 | 0.21 | 0.15 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
| total | NaN | NaN | NaN | 1304245.0 | 865023.0 | 495442.0 | 122201.94 | 15133.01 | 14146.13 | 9848994.0 | 1352158.0 | 1296053.0 | 4876258.0 | 453698.0 | 10009680.0 | 154681.0 | 2204687.0 | -104402.0 | 9858592.0 |
15606 rows × 19 columns
# Calcul de la part alimentation animale
part_ali_animale = (dispo_inter.loc['total', 'Aliments pour animaux']/dispo_inter.loc['total', 'disponibilité intérieure calculée'])*100
print(round(part_ali_animale, 1), "% du total est attribuée à l'alimentation animale.")
# Calcul de la part alimentation humaine
part_ali_humaine = (dispo_inter.loc['total', 'Nourriture']/dispo_inter.loc['total', 'disponibilité intérieure calculée'])*100
print(round(part_ali_humaine, 1), "% du total est attribuée à l'alimentation humaine.")
# Calcul de la part perte
part_perte = (dispo_inter.loc['total', 'Pertes']/dispo_inter.loc['total', 'disponibilité intérieure calculée'])*100
print(round(part_perte, 1), "% du total est attribuée aux pertes.")
# Calcul de la part autres utilisations
autre = dispo_inter.loc['total', 'Autres Utilisations']+dispo_inter.loc['total', 'Semences']+dispo_inter.loc['total', 'Traitement']
part_autres_utilisations = (autre/dispo_inter.loc['total', 'disponibilité intérieure calculée'])*100
print(round(part_autres_utilisations, 1), "% du total est attribuée à d'autres utilisations.")
13.2 % du total est attribuée à l'alimentation animale. 49.5 % du total est attribuée à l'alimentation humaine. 4.6 % du total est attribuée aux pertes. 32.7 % du total est attribuée à d'autres utilisations.
# Création du diagramme circulaire
liste = [part_ali_animale, part_ali_humaine, part_perte, part_autres_utilisations]
labels = 'Alimentation animale', 'Alimentation humaine', 'Pertes', 'Autre (Semences, Traitement, Autres utilisations)'
colors = 'yellowgreen', 'skyblue', 'tomato', 'silver'
plt.title("Utilisation de la disponibilité intérieure", fontsize=18)
plt.pie(liste, labels = labels, autopct = '%1.1f%%', colors = colors, startangle = 90)
plt.show()
La moitié des denrées disponibles est utilisée pour l'alimentation humaine, environ 13% pour l'alimentation animale et environ 5% des denrées disponibles sont perdues.
On étudie la répartition des céréales entre l'alimentation humaine et animale:
liste_cereales = ['Céréales, Autres', 'Avoine', 'Blé', 'Maïs', 'Millet', 'Orge', 'Riz (Eq Blanchi)', 'Seigle', 'Sorgho']
liste_pays_sous_dev = ['Angola', 'Bénin', 'Burkina Faso', 'Burundi', 'Comores', 'Djibouti', 'Érythrée', 'Éthiopie', 'Gambie', 'Guinée', 'Guinée-Bissau','Lesotho', 'Libéria', 'Madagascar', 'Malawi', 'Mali', 'Mauritanie', 'Mozambique', 'Niger', 'Ouganda', 'République centrafricaine', 'Congo', 'Rwanda', 'Sao Tomé-et-Principe', 'Sénégal', 'Sierra Leone', 'Somalie', 'Soudan', 'Soudan du Sud', 'République-Unie de Tanzanie', 'Tchad', 'Togo', 'Zambie', 'Afghanistan', 'Bangladesh', 'Bhoutan', 'Cambodge', 'République démocratique populaire lao', 'Birmanie', 'Népal', 'Timor-Leste', 'Yémen', 'Haïti', 'Kiribati', 'Îles Salomon', 'Tuvalu']
liste_pays_dev = ["États-Unis d'Amérique", 'Canada', 'Singapour', 'Chine - RAS de Hong-Kong', 'Chine, continentale', 'Japon', 'République de Corée', 'Israël', 'Chine, Taiwan Province de', 'Norvège', 'Suisse', 'Allemagne', 'Danemark', 'Pays-Bas', 'Irlande', 'Finlande', 'Suède', 'Liechtenstein', 'Royaume-Uni', 'Luxembourg', 'France', 'Belgique', 'Autriche', 'Slovénie', 'Italie', 'Espagne', 'Tchéquie (la)', 'Grèce', 'Estonie', 'Andorre', 'Chypre', 'Malte', 'Slovaquie', 'Portugal', 'Australie', 'Nouvelle-Zélande']
tous_pays = dispo[dispo["Produit"].isin(liste_cereales)]
pays_sous_dev = dispo[(dispo["Produit"].isin(liste_cereales))&(dispo["Pays"].isin(liste_pays_sous_dev))]
pays_dev = dispo[(dispo["Produit"].isin(liste_cereales))&(dispo["Pays"].isin(liste_pays_dev))]
print("Tous les pays:")
# Calcul des différentes parts pour TOUS LES PAYS
part_animale_tous = (tous_pays['Aliments pour animaux'].sum()/tous_pays['Disponibilité intérieure'].sum())*100
print(round(part_animale_tous, 0), "% de la disponibilité en céréale est utilisé dans l'alimentation animale")
part_humaine_tous = (tous_pays['Nourriture'].sum()/tous_pays['Disponibilité intérieure'].sum())*100
print(round(part_humaine_tous, 0), "% de la disponibilité en céréale est utilisé dans l'alimentation humaine.")
autre_tous = 100-(part_animale_tous + part_humaine_tous)
print(round(autre_tous, 0), "% de la disponibilité en céréale est utilisé pour autre chose.")
print("Pays sous-développés:")
# Calcul des différentes parts pour les PAYS SOUS DEVELOPPES
part_animale_sous = (pays_sous_dev['Aliments pour animaux'].sum()/pays_sous_dev['Disponibilité intérieure'].sum())*100
print(round(part_animale_sous, 0), "% de la disponibilité en céréale est utilisé dans l'alimentation animale")
part_humaine_sous = (pays_sous_dev['Nourriture'].sum()/pays_sous_dev['Disponibilité intérieure'].sum())*100
print(round(part_humaine_sous, 0), "% de la disponibilité en céréale est utilisé dans l'alimentation humaine.")
autre_sous = 100-(part_animale_sous + part_humaine_sous)
print(round(autre_sous, 0), "% de la disponibilité en céréale est utilisé pour autre chose.")
print("Pays développés:")
# Calcul des différentes parts pour les PAYS DEVELOPPES
part_animale_dev = (pays_dev['Aliments pour animaux'].sum()/pays_dev['Disponibilité intérieure'].sum())*100
print(round(part_animale_dev, 0), "% de la disponibilité en céréale est utilisé dans l'alimentation animale")
part_humaine_dev = (pays_dev['Nourriture'].sum()/pays_dev['Disponibilité intérieure'].sum())*100
print(round(part_humaine_dev, 0), "% de la disponibilité en céréale est utilisé dans l'alimentation humaine.")
autre_dev = 100-(part_animale_dev + part_humaine_dev)
print(round(autre_dev, 0), "% de la disponibilité en céréale est utilisé pour autre chose.")
Tous les pays: 36.0 % de la disponibilité en céréale est utilisé dans l'alimentation animale 43.0 % de la disponibilité en céréale est utilisé dans l'alimentation humaine. 21.0 % de la disponibilité en céréale est utilisé pour autre chose. Pays sous-développés: 8.0 % de la disponibilité en céréale est utilisé dans l'alimentation animale 72.0 % de la disponibilité en céréale est utilisé dans l'alimentation humaine. 20.0 % de la disponibilité en céréale est utilisé pour autre chose. Pays développés: 46.0 % de la disponibilité en céréale est utilisé dans l'alimentation animale 28.0 % de la disponibilité en céréale est utilisé dans l'alimentation humaine. 26.0 % de la disponibilité en céréale est utilisé pour autre chose.
# Création d'un DataFrame avec les résultats sur l'utilisation des céréales
val = np.array([[part_animale_tous, part_humaine_tous, autre_tous],
[part_animale_sous, part_humaine_sous, autre_sous],
[part_animale_dev, part_humaine_dev, autre_dev]])
df_cereales = pd.DataFrame(val, index = ['Tous les pays', 'Pays sous-développés', 'Pays développés'],
columns = ['Alimentation animale', 'Alimentation humaine', 'Autre'])
# Création d'un diagramme
df_cereales.plot(kind = 'bar')
plt.title("Utilisation des céréales", fontsize=18)
plt.xlabel("Catégorie de pays", fontsize=13)
plt.ylabel("Quantité de céréale (%)", fontsize=13)
plt.xticks(rotation=0)
plt.show()
D'après le graphique ci-dessus, si l'on considère tous les pays, 43% des céréales sont utilisés pour l'alimentation humaine et 36% pour l'alimentation animale.
Si l'on regarde l'utilisation des céréales en fonction du niveau de développement des pays (pays sous-développés ou pays développés) on observe de grandes différences.
Le manioc est un tubercule utilisé dans l'alimentation humaine et animale, on peut également en extraire l'amidon ou l'utiliser pour produire de l'éthanol.
# Sélection des données relatives au manioc en Thaïlande
mask = dispo['Pays'].str.contains('Thaïlande') & dispo['Produit'].str.contains('Manioc')
manioc_thailande = dispo.loc[mask]
manioc_thailande = manioc_thailande[['Pays', 'Produit', 'Disponibilité intérieure', 'Exportations - Quantité', 'Importations - Quantité', 'Production']]
# Part de la production de manioc exporté par la Thaïlande en 2017
part_export = (manioc_thailande.iloc[0]['Exportations - Quantité']/manioc_thailande.iloc[0]['Production'])*100
print('La Thaïlande exporte', round(part_export, 1),'% de sa production de manioc.')
#Part de sous-nutrition
mask2 = population['Année']==2017
population2 = population.loc[mask2]
mask3 = sous_nutrition['Année'] == '2016-2018'
sous_nutrition2 = sous_nutrition.loc[mask3]
sous_nutrition2 = sous_nutrition2.drop(columns = "Année")
# On joint les DataFrame et on sélectionne la ligne correspondant à la Thaïlande
dispo_population = pd.merge(population2, sous_nutrition2, on = 'Pays')
dispo_population_thailande = dispo_population[dispo_population['Pays'] == 'Thaïlande']
# Calcul de la part de la population en état de sous-nutrition
part_sous_nutrition = (dispo_population_thailande.iloc[0]['Sous-nutrition']/dispo_population_thailande.iloc[0]['Population'])*100
print('En Thaïlande,', round(part_sous_nutrition, 2), '% de la population est en état de sous-nutrition.')
La Thaïlande exporte 83.4 % de sa production de manioc. En Thaïlande, 8.96 % de la population est en état de sous-nutrition.
La Thaïlande est l'un des principaux pays producteurs de manioc. En 2017, 83.4% de cette production était destiné à l'exportation. Or, on constate également que 8,96 % des Thaïlandais étaient sous-alimentés sur la même année 2017. La Thaïlande exporte donc la plus grande partie de sa production de manioc, qui dans de nombreux pays constitue la base de l'alimentation, notamment en Afrique, alors même qu'une partie de sa population ne mange pas à sa faim.
# On récupère le dataframe dispo_population utilisé précédement et on y ajoute une colonne 'Proportion'
dispo_population['Proportion'] = (dispo_population['Sous-nutrition']/dispo_population['Population'])*100
# Importation d'un fichier avec le code d'identification des pays
code_iso = pd.read_csv("C:/Users/jorda/Data_P4/code_iso.csv", sep = ';')
# On joint le DataFrame des codes pays avec le DataFrame dispo_population
sous_nutrition_map = pd.merge(code_iso, dispo_population, left_on = 'Pays_code', right_on = 'Pays')
sous_nutrition_map.head()
| Code_iso3 | Pays_code | Pays | Année | Population | Sous-nutrition | Proportion | |
|---|---|---|---|---|---|---|---|
| 0 | AFG | Afghanistan | Afghanistan | 2017 | 36.296113 | 10.5 | 28.928718 |
| 1 | ALB | Albanie | Albanie | 2017 | 2.884169 | 0.1 | 3.467203 |
| 2 | DZA | Algérie | Algérie | 2017 | 41.389189 | 1.3 | 3.140917 |
| 3 | ASM | Samoa américaines | Samoa américaines | 2017 | 0.055620 | NaN | NaN |
| 4 | AND | Andorre | Andorre | 2017 | 0.077001 | NaN | NaN |
# On crée la carte qui indique la proportion de sous-nutrition par pays en 2017
figure = px.choropleth(sous_nutrition_map, locations="Code_iso3",
color="Proportion",hover_name="Pays",
color_continuous_scale="Reds",
labels={"Proportion":"Proportion de personnes sous-nutries (%)"},
)
figure.layout.update(title="Proportion de sous-nutrition par pays en 2017", height=500)
figure.show()
On peut remarquer sur cette carte que la sous-nutrition est particulièrement présente dans les pays du sud. Principalement en Afrique, mais aussi en Asie méridionale et en Amérique Latine.
# On classe selon l'ordre décroissant des valeurs de la colonne 'Proportion' et on sélectionne les 10 premières lignes
pop_sous_ali_dix = dispo_population.sort_values(by = 'Proportion', ascending = False)
pop_sous_ali_dix = pop_sous_ali_dix.iloc[:10]
# Création de l'histogramme
pays = pop_sous_ali_dix.Pays
proportion = pop_sous_ali_dix.Proportion
plt.barh(pays, proportion, color = 'firebrick')
plt.title("Les 10 pays les plus touchés par la sous-nutrition", fontsize=18)
plt.xlabel("Proportion sous-nutrition (%)")
plt.ylabel("Pays")
plt.show()
Haïti est le pays avec la plus forte proportion de sous-nutrition en 2017, soit environ 48% de sa population.
# Sélection des colonnes 'Pays' et 'Valeur'
aide_alimentaire = aide[['Pays', 'Aide']]
# Somme des aides perçues par pays
aide_alimentaire = aide_alimentaire.groupby(['Pays']).sum().reset_index()
# Affichage selon l'ordre décroissant de l'aide perçue et sélection des 10 premiers
aide_alimentaire = aide_alimentaire.sort_values(by = 'Aide', ascending = False)
aide_alimentaire = aide_alimentaire.iloc[:10]
# Création de l'histogramme
a = aide_alimentaire.Pays
b = aide_alimentaire.Aide
plt.barh(a, b)
plt.title("Pays qui ont le plus bénéficié d'aide depuis 2013", fontsize=18)
plt.xlabel("Aide alimentaire (millions de tonnes)")
plt.ylabel("Pays")
plt.show()
Depuis 2013, c'est la République arabe syrienne qui a le plus bénéficié d'aide alimentaire, environ 1,8 millons de tonnes.
# On joint le DataFrame des codes pays avec le DataFrame qui donne la disponibilité alimentaire par pays
disponibilite_map = pd.merge(code_iso, dispo_pays, left_on = 'Pays_code', right_on = 'Pays')
disponibilite_map.head()
| Code_iso3 | Pays_code | Pays | Disponibilité alimentaire (Kcal/personne/jour) | |
|---|---|---|---|---|
| 0 | AFG | Afghanistan | Afghanistan | 2087.0 |
| 1 | ALB | Albanie | Albanie | 3188.0 |
| 2 | DZA | Algérie | Algérie | 3293.0 |
| 3 | AGO | Angola | Angola | 2474.0 |
| 4 | ATG | Antigua-et-Barbuda | Antigua-et-Barbuda | 2416.0 |
# Création de la carte indiquant la disponibilité alimentaire par pays en 2017
figure = px.choropleth(disponibilite_map, locations="Code_iso3",
color="Disponibilité alimentaire (Kcal/personne/jour)",hover_name="Pays",
color_continuous_scale="RdYlGn",
labels={"Disponibilité alimentaire (Kcal/personne/jour)":"Disponibilité alimentaire (Kcal/personne/jour)"},
)
figure.layout.update(title="Disponibilité alimentaire par pays en 2017", height=500)
figure.show()
# Changement de nom d'une colonne
disponibilite_ali = dispo_pays.rename(columns = {'Disponibilité alimentaire (Kcal/personne/jour)': 'nombre_kcal'})
# On trie dans l'ordre croissant et on prends les 10 premiers
disponibilite_ali_moins = disponibilite_ali.sort_values(by = 'nombre_kcal', ascending = True)
disponibilite_ali_moins = disponibilite_ali_moins.iloc[:10]
# On trie dans l'ordre décroissant et on prends les 10 premiers
disponibilite_ali_plus = disponibilite_ali.sort_values(by = 'nombre_kcal', ascending = False)
disponibilite_ali_plus = disponibilite_ali_plus.iloc[:10]
# Création de l'histogramme représentant les pays ayant le plus et le moins de disponibilité alimentaire en 2017
X1 = disponibilite_ali_moins.Pays
X2 = disponibilite_ali_plus.Pays
y1 = disponibilite_ali_moins.nombre_kcal
y2 = disponibilite_ali_plus.nombre_kcal
plt.barh(X1, y1, color='firebrick', label='Le moins')
plt.barh(X2, y2, color='g', label='Le plus')
plt.xlabel("Disponibilité alimentaire (Kcal/personne/jour)")
plt.ylabel("Pays")
plt.title("Pays ayant le plus et le moins de disponibilité alimentaire par habitant en 2017", fontsize=18)
plt.legend()
plt.show()
D'après le graphique ci-dessus, les pays avec le plus de disponibilité alimentaire ont environ 1000 à 1500 Kcal de plus par jour par rapport aux pays ayant le moins de disponibilité.
De plus, les pays avec la plus grande disponibilité ont environ 3500 kcal à disposition par jour, ce qui est bien supérieur à ce qui est nécessaire pour subvenir aux besoins énergétiques journaliers d'un humain (2500 Kcal en moyenne pour un homme). Il est à noter, cependant, que ces résultats ne nous renseignent pas sur la répartition des denrées au sein d'un pays.